package com.lzh.farmersshop.controller.mall;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.lzh.farmersshop.entity.Useradress;
import com.lzh.farmersshop.entity.Userinfo;
import com.lzh.farmersshop.service.UseradressService;
import com.lzh.farmersshop.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * (Useradress)表控制层
 *
 * @author makejava
 * @since 2024-01-04 15:41:51
 */
@Slf4j
@RestController
@RequestMapping("mall/useradress")
@Transactional(rollbackFor = Exception.class)
public class AdressController {
    /**
     * 服务对象
     */
    @Resource
    private UseradressService useradressService;


    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("selectOne")
    public Result selectOne(Integer id,HttpServletRequest request) {
        return Result.success(useradressService.getById(id));
    }

    /**
     * 新增数据
     *
     * @param useradress 实体对象
     * @return 新增结果
     */
    @PostMapping("add")
    public Result insert(Useradress useradress, HttpServletRequest request) {
        //获取用户信息
        if (request.getSession().getAttribute("userinfo")== null) {
            return Result.failure(401,"请先登录！！！");
        }

        //判断参数是否为空，如果为空直接返回
        if (useradress == null) {
            return Result.failure(400,"参数不能为空！");
        }

        //获取用户信息
        Userinfo userinfo = (Userinfo) request.getSession().getAttribute("userinfo");
        useradress.setIsdelete(1);
        useradress.setUserid(userinfo.getId());

        //只能有一个默认地址，如果本次为1就修改其他的地址为不是默认地址
        Integer dedaultadress = useradress.getDedaultadress();
        if (dedaultadress==1){
            UpdateWrapper<Useradress> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("userid",userinfo.getId());
            updateWrapper.set("dedaultadress",2);
            useradressService.update(null,updateWrapper);
        }

        if (useradressService.save(useradress)){
            return Result.success("新增成功！！！");
        }
        return Result.failure(400,"新增失败！！！");
    }

    /**
     * 修改数据
     *
     * @param useradress 实体对象
     * @return 修改结果
     */
    @PostMapping("update")
    public Result update(Useradress useradress,HttpServletRequest request) {
        if (request.getSession().getAttribute("userinfo")== null) {
            return Result.failure(401,"请先登录！！！");
        }

        if (useradress == null){
            return Result.failure("参数不能为空！！！");
        }

        Integer dedaultadress = useradress.getDedaultadress();
        if (dedaultadress==1){
            Userinfo userinfo = (Userinfo) request.getSession().getAttribute("userinfo");
            UpdateWrapper<Useradress> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("userid",userinfo.getId());
            updateWrapper.set("dedaultadress",2);
            useradressService.update(null,updateWrapper);
        }

        if (useradressService.updateById(useradress)){
            return Result.success("修改成功！！！");
        }
        return Result.failure("修改失败！！！");
    }

    /**
     * 删除数据
     *
     * @param id 主键结合
     * @return 删除结果
     */
    @PostMapping("delete")
    public Result delete(Integer id,HttpServletRequest request) {
        if (request.getSession().getAttribute("userinfo")== null) {
            return Result.failure(401,"请先登录！！！");
        }

        if (id==null){
            return Result.failure("参数不能为空！！！");
        }

        Useradress useradress = new Useradress();
        useradress.setId(id);
        useradress.setIsdelete(2);

        if (useradressService.removeById(useradress)){
            return Result.success("删除成功！！！");
        }
        return Result.failure("删除失败！！！");
    }
}

